package com.cms.recursoshumanos.activity.user;

import java.util.Date;

import com.example.frontendrecursoshumanos.R;
import com.cms.recursoshumanos.activity.main.MainRecursosHumanosActivity;
import com.cms.recursoshumanos.activity.user.adiestramiento.ListaAdiestramientoActivity;
import com.cms.recursoshumanos.activity.user.estudio.ListaEstudioActivity;
import com.cms.recursoshumanos.activity.user.familiar.ListaFamiliarActicity;
import com.cms.recursoshumanos.activity.user.poliza.DetailPolizaActivity;
import com.cms.recursoshumanos.activity.user.recibo.ListaReciboActivity;
import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.component.dialog.CustomDatePickerMonthYearDialog;
import com.cms.recursoshumanos.component.dialog.CustomDatePickerMonthYearDialog.DateDialogListener;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.handler.CartaTrabajoActivityHandler;
import com.cms.recursoshumanos.handler.DetailPolizaActivityHandler;
import com.cms.recursoshumanos.handler.ListaAdiestramientoActivityHandler;
import com.cms.recursoshumanos.handler.ListaEstudioActivityHandler;
import com.cms.recursoshumanos.handler.ListaFamiliarActivityHandler;
import com.cms.recursoshumanos.handler.ListaReciboActivityHandler;
import com.cms.recursoshumanos.handler.MyUserDetailActivyHandler;
import com.cms.recursoshumanos.object.Empleado;
import com.cms.recursoshumanos.object.TipoRecibo;
import com.cms.recursoshumanos.object.Usuario;
import com.cms.recursoshumanos.utilities.Tool;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ProgressDialog;
import android.content.Intent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class UserInfoActicity extends MainRecursosHumanosActivity {

	protected ListaFamiliarAsync asyncListaFamiliarTask;
	protected ListaAdiestramientoAsync asyncListaAdiestramientoTask;
	protected ListaEstudioAsync asyncListaEstudioTask;
	protected ListaReciboAsync asyncListaReciboTask;
	protected DetailPolizaAsync asynDetailPolizaTask;
	protected InfoUserAsync asyncInfoUserTask;
	protected SolCartaTrabajoAsync asyncSolCartaTrabajoTask;
	
	private static Usuario elUsuario;
	private static Empleado elEmpleado;
	
	private LinearLayout layout_info_general;
	private RelativeLayout layout_user_portait;
	private TextView nombre_persona_portait ;
	private TextView apellido_persona_protait;
	private TextView nombre_persona_second_row;
	private TextView apellido_persona_second_row;
	private TextView fecha_nac_second_row;
	private TextView telefono_1_second_row;
	private TextView telefono_2_second_row;
	private TextView direccion_second_row;
	private TextView sexo_second_row;
	private TextView email_second_row;
	
	private TextView nombre_departamento_second_row;
	private TextView nombre_sede_second_row;
	private TextView nombre_cargo_second_row;
	private TextView direccion_departamento_second_row;
	private TextView nombre_supervisor_second_row;
	private TextView email_supervisor_second_row;
	private TextView telefono1_supervisor_row;
	private TextView telefono2_supervisor_row;
	
	private ProgressDialog dialog;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_user_info_acticity);
		elUsuario = UserInfoCache.getInstance().getUsuario();
		elEmpleado = UserInfoCache.getInstance().getEmpleado();
		setComponents();
		//UserInfoCache.getInstance().setUsuario(null);
	}
	@Override
	protected void onResume() 
	{
		super.onResume();
		if (elUsuario == null)
		{
			elUsuario = UserInfoCache.getInstance().getUsuario();
		}
		if (elEmpleado == null)
		{
			elEmpleado = UserInfoCache.getInstance().getEmpleado();
		}
	}
	public void onRefreshClick(View v)
	{
		refreshUserInfo();
	}
	public void refreshUserInfo()
	{
		asyncInfoUserTask = new InfoUserAsync(elUsuario);
		asyncInfoUserTask.execute();
	}
	public void setComponents()
	{
		
		layout_info_general = (LinearLayout) findViewById(R.id.llInformacionGeneral);
		layout_user_portait = (RelativeLayout) findViewById(R.id.rlUsuarioPortait);
		
		nombre_persona_portait = (TextView) layout_user_portait.findViewById(R.id.tvPortaitNombreUsuario);
		apellido_persona_protait = (TextView) layout_user_portait.findViewById(R.id.tvPortaitApellidoUsuario);
		nombre_persona_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueNombrePersona);
		apellido_persona_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueApellidoPersona);
		fecha_nac_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueFechaNacPersona);
		telefono_1_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueTelefono1Persona);
		telefono_2_second_row =(TextView) layout_info_general.findViewById(R.id.tvValueTelefono2Persona);
		direccion_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueDireccionPersona);
		sexo_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueSexoPersona);
		email_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueEmailPersona);
		
		nombre_departamento_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueNombreDepartamento);
		direccion_departamento_second_row =(TextView) layout_info_general.findViewById(R.id.tvValueDireccionDepartamento);
		nombre_supervisor_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueNombreSupervisor);
		email_supervisor_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueEmailSupervisor);
		telefono1_supervisor_row = (TextView) layout_info_general.findViewById(R.id.tvValueTelefono1Supervisor);
		telefono2_supervisor_row = (TextView) layout_info_general.findViewById(R.id.tvValueTelefono2Supervisor);
		
		nombre_sede_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueNombreSede);
		nombre_cargo_second_row = (TextView) layout_info_general.findViewById(R.id.tvValueNombreCargo);
		
		
		
		setComponentsValor();

	}
	public String getNomprePersona()
	{
		if (elEmpleado.getPersona().getNombre_Persona_2() == null)
		{
			return elEmpleado.getPersona().getNombre_Persona_1();
		}
		else
		{
			return elEmpleado.getPersona().getNombre_Persona_1()+" "+
					elEmpleado.getPersona().getNombre_Persona_2();
		}
	}
	public String getApellidoPersona()
	{
		if (elEmpleado.getPersona().getApellido_Persona_2() == null)
		{
			return elEmpleado.getPersona().getApellido_Persona_1();
		}
		else
		{
			return elEmpleado.getPersona().getApellido_Persona_1()+" "+
					elEmpleado.getPersona().getApellido_Persona_2();
		}
	}

	public void setComponentsValor()
	{
		//*--------------Seteo de Portait------------------------------------
		nombre_persona_portait.setText(elEmpleado.getPersona().getNombre_Persona_1());
		apellido_persona_protait.setText(elEmpleado.getPersona().getApellido_Persona_1());
		
		//*--------------Seteo de Detalle------------------------------------
		
		nombre_persona_second_row.setText(getNomprePersona());
		apellido_persona_second_row.setText(getApellidoPersona());
		fecha_nac_second_row.setText(Tool.getInstance().parseDateToString(elEmpleado.getPersona().getFecha_Nacimiento(), 
										6));
		telefono_1_second_row.setText(elEmpleado.getPersona().getTelefono_Persona_1());
		
		LinearLayout llTelefono2Persona = (LinearLayout) findViewById(R.id.tlTelefono2Persona);
		
		if (elEmpleado.getPersona().getTelefono_Persona_2() != null)
		{
			llTelefono2Persona.setVisibility(View.VISIBLE);
			telefono_2_second_row.setText(elEmpleado.getPersona().getTelefono_Persona_2());
		}
		else
		{
			llTelefono2Persona.setVisibility(View.GONE);
		}
		
		direccion_second_row.setText(elEmpleado.getPersona().getDireccion());
		sexo_second_row.setText(elEmpleado.getPersona().getSexo_Persona());
		email_second_row.setText(elEmpleado.getPersona().getEmailPersona());
		
		nombre_departamento_second_row.setText(elEmpleado.getDepartamento().getNombre_Departamento());
		direccion_departamento_second_row.setText(elEmpleado.getDepartamento().getDireccionDepartamento());
		
		setComponentValorSupervisor();
		
		nombre_sede_second_row.setText(elEmpleado.getSede().getNombre_Sede());
		nombre_cargo_second_row.setText(elEmpleado.getCargoEmpleado());
		
		
		
	}
	public void setComponentValorSupervisor()
	{

		LinearLayout llNombreSupervisor = (LinearLayout) findViewById(R.id.tlInfoSupervisor);
		LinearLayout llTelefono1Supervisor = (LinearLayout) findViewById(R.id.tlInfoTelefono1Supervisor);
		LinearLayout llTelefono2Supervisor = (LinearLayout) findViewById(R.id.tlInfoTelefono2Supervisor);
		LinearLayout llEmailSupervisor = (LinearLayout) findViewById(R.id.tlInfoEmailSupervisor);
		
		if (elEmpleado.getDepartamento().getSupervisor() != null)
		{
			llNombreSupervisor.setVisibility(View.VISIBLE);
			llTelefono1Supervisor.setVisibility(View.VISIBLE);
			llTelefono2Supervisor.setVisibility(View.VISIBLE);
			llEmailSupervisor.setVisibility(View.VISIBLE);
			
			
			nombre_supervisor_second_row.setText(elEmpleado.getDepartamento().getSupervisor().getNombre_Persona_1()+" "
					+elEmpleado.getDepartamento().getSupervisor().getApellido_Persona_1());
			email_supervisor_second_row.setText(elEmpleado.getDepartamento().getSupervisor().getEmailPersona());
			telefono1_supervisor_row.setText(elEmpleado.getDepartamento().getSupervisor().getTelefono_Persona_1());
			
			if (elEmpleado.getDepartamento().getSupervisor().getTelefono_Persona_2() != null)
			{
				llTelefono2Supervisor.setVisibility(View.VISIBLE);
				telefono2_supervisor_row.setText(elEmpleado.getDepartamento().getSupervisor().getTelefono_Persona_2());
			}
			else
			{
				llTelefono2Supervisor.setVisibility(View.GONE);
			}
		}
		else
		{
			llNombreSupervisor.setVisibility(View.GONE);
			llTelefono1Supervisor.setVisibility(View.GONE);
			llTelefono2Supervisor.setVisibility(View.GONE);
			llEmailSupervisor.setVisibility(View.GONE);
		}
	}
	public void onListaFamiliarClick(View view)
    {
		asyncListaFamiliarTask = new ListaFamiliarAsync(elUsuario);
		asyncListaFamiliarTask.execute();
	}
	
	public void onListaEstudioClick(View view)
    {
		asyncListaEstudioTask = new ListaEstudioAsync(elUsuario);
		asyncListaEstudioTask.execute();	
	}
	
	public void onListaAdiestramientoClick(View view)
    {

		asyncListaAdiestramientoTask = new ListaAdiestramientoAsync(elUsuario);
		asyncListaAdiestramientoTask.execute();
		
	}
	
	public void onListaPolizaClick(View view)
    {
		asynDetailPolizaTask = new DetailPolizaAsync(elUsuario);
		asynDetailPolizaTask.execute();
	
	}
	public void onSolCartaTrabajoClick(View view)
	{
		asyncSolCartaTrabajoTask = new SolCartaTrabajoAsync(elUsuario);
		asyncSolCartaTrabajoTask.execute();	
	}
	public void onListaReciboClick(View view)
    {
		
		CustomDatePickerMonthYearDialog.DateDialogListener date = new DateDialogListener() 
		{
			
			@Override
			public void ready(Date fecha_selec) 
			{
				findListaRecibo(fecha_selec);
			}
			
			@Override
			public void cancelled() 
			{
				
			}
		};
		CustomDatePickerMonthYearDialog datedialog = new 
						CustomDatePickerMonthYearDialog(UserInfoActicity.this, date);
		datedialog.show();
		
	}
	public void findListaRecibo(Date fecha_selec)
	{
		asyncListaReciboTask = new ListaReciboAsync(elUsuario, fecha_selec);
		asyncListaReciboTask.execute();	
	}
	public void refresh_page()
	{
		elEmpleado = UserInfoCache.getInstance().getEmpleado();
		setComponentsValor();
	}
	public void goListaFamiliar()
	{
		Intent intent = new Intent(UserInfoActicity.this, ListaFamiliarActicity.class);
		startActivity(intent);
	}
	public void goListaAdiestramiento()
	{
		Intent intent = new Intent(UserInfoActicity.this, ListaAdiestramientoActivity.class);
		startActivity(intent);
	}
	public void goListaEstudio()
	{
		Intent intent = new Intent(UserInfoActicity.this, ListaEstudioActivity.class);
		startActivity(intent);
	}
	public void goListaRecibo()
	{
		Intent intent = new Intent(UserInfoActicity.this, ListaReciboActivity.class);
		startActivity(intent);
	}
	public void goPoliza()
	{
		Intent intent = new Intent(UserInfoActicity.this, DetailPolizaActivity.class);
		startActivity(intent);
	}
	private class InfoUserAsync extends AsyncTask<String, Void, String>
	{
		private Usuario elUsuario;
		
		public InfoUserAsync(Usuario elUsuario)
		{
			this.elUsuario = elUsuario;

		}
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			MyUserDetailActivyHandler handler = new MyUserDetailActivyHandler();
			String result = handler.refreshMyUserDetail(this.elUsuario.getNombre_Usuario(), 
													this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				refresh_page();
			}
			dialog.cancel();
			this.cancel(true);
		}
	}
	private class ListaFamiliarAsync extends AsyncTask<String, Void, String>
	{
		
		private Usuario elUsuario;

		public  ListaFamiliarAsync(Usuario elUsuario)
	    {
			this.elUsuario = elUsuario;
	    }
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			ListaFamiliarActivityHandler handler = new ListaFamiliarActivityHandler();
			String result = handler.getListaFamiliar(this.elUsuario.getNombre_Usuario(),
														this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Tool.getInstance().saveUserInfoShared(4,UserInfoCache.getInstance().getListaFamiliar());
				goListaFamiliar();
			}
			else 
			{
				Tool.getInstance().showMessage( str_result);
			}
			dialog.cancel();
			this.cancel(true);
			
			
		}
		
	}
	
	private class ListaAdiestramientoAsync extends AsyncTask<String, Void, String>
	{
		
		private Usuario elUsuario;

		public  ListaAdiestramientoAsync(Usuario elUsuario)
	    {
			this.elUsuario = elUsuario;
	    }
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			ListaAdiestramientoActivityHandler handler = new ListaAdiestramientoActivityHandler();
			String result = handler.getListaAdiestramiento(this.elUsuario.getNombre_Usuario(),
															this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Tool.getInstance().saveUserInfoShared(2,UserInfoCache.getInstance().getListaAdiestramiento());
				goListaAdiestramiento();
			}
			else 
			{
				Tool.getInstance().showMessage( str_result);
			}
			dialog.cancel();
			this.cancel(true);
			
			
		}
		
	}
	
	private class ListaEstudioAsync extends AsyncTask<String, Void, String>
	{
		
		private Usuario elUsuario;

		public  ListaEstudioAsync(Usuario elUsuario)
	    {
			this.elUsuario = elUsuario;
	    }
		
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			ListaEstudioActivityHandler handler = new ListaEstudioActivityHandler();
			String result = handler.getListaEstudio(this.elUsuario.getNombre_Usuario(),
														this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Tool.getInstance().saveUserInfoShared(3,UserInfoCache.getInstance().getListaEstudio());
				goListaEstudio();
			}
			else 
			{
				Tool.getInstance().showMessage( str_result);
			}
			dialog.cancel();
			this.cancel(true);
		}
		
	}
	private class ListaReciboAsync extends AsyncTask<String, Void, String>
	{
		
		private Usuario elUsuario;
		private Date fecha_selec;
		private TipoRecibo elTipoRecibo;

		public  ListaReciboAsync(Usuario elUsuario, Date fecha_selec)
	    {
			this.elUsuario = elUsuario;
			this.fecha_selec = fecha_selec;
			this.elTipoRecibo = new TipoRecibo(0, "Todos");
	    }
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			ListaReciboActivityHandler handler = new ListaReciboActivityHandler();
			String result = handler.getListaRecibo(this.elUsuario.getNombre_Usuario(),
													this.elUsuario.getPassword(),
													this.fecha_selec,
													this.elTipoRecibo);
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				//Tool.getInstance().saveUserInfoShared(6,UserInfoCache.getInstance().getListaRecibo());
				goListaRecibo();
			}
			else 
			{
				Tool.getInstance().showMessage( str_result);
			}
			dialog.cancel();
			this.cancel(true);
		}
		
	}
	private class SolCartaTrabajoAsync extends AsyncTask<String, Void, String>
	{
		
		private Usuario elUsuario;


		public  SolCartaTrabajoAsync(Usuario elUsuario)
	    {
			this.elUsuario = elUsuario;
	    }
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			CartaTrabajoActivityHandler handler = new CartaTrabajoActivityHandler();
			String result = handler.getCartaTrabajo(this.elUsuario.getNombre_Usuario(),
													this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			String str_result = result;
			
			Tool.getInstance().showMessagePeticion(str_result);

			dialog.cancel();
			this.cancel(true);
		}
		
	}
	private class DetailPolizaAsync extends AsyncTask<String, Void, String>
	{
		private Usuario elUsuario;

		public  DetailPolizaAsync(Usuario elUsuario)
	    {
			this.elUsuario = elUsuario;
	    }
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(UserInfoActicity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			DetailPolizaActivityHandler handler = new DetailPolizaActivityHandler();
			String result = handler.getDetailPoliza(this.elUsuario.getNombre_Usuario(),
														this.elUsuario.getPassword());
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Tool.getInstance().saveUserInfoShared(7,UserInfoCache.getInstance().getPoliza());
				goPoliza();
			}
			else 
			{
				Tool.getInstance().showMessage(str_result);
			}
			dialog.cancel();
			this.cancel(true);
		}
		
	}

}
